package util;

import java.util.Map;

/**
 * 微信工具类
 * @author wuyunbin
 */
public class WeChatUtil {

    /**
     * 获取普通access_token 这个一天只能获取2000次 需要缓存起来
     * @param appId 微信公众号appId
     * @param secret 微信公众号的秘钥
     * @return
     */
    public static String getClientCredentialAccessToken(String appId, String secret) {
        //redis中没有可用的token则去微信获取一个
        String url="https://api.weixin.qq.com/cgi-bin/token?appid="+appId
                +"&secret="+secret
                +"&grant_type=client_credential";
        return HttpUtil.httpRequest(url);
    }

    /**
     * 获取授权 access_token
     * @param appId 微信公众号appId
     * @param secret 微信公众号的秘钥
     * @param code 用户点击前端页面的授权之后微信给返回的code
     * @return
     */
    public static String getAuthorizationAccessToken(String appId, String secret, String code) {
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid="+appId
                +"&secret="+secret
                +"&code="+code
                +"&grant_type=authorization_code";
        return HttpUtil.httpRequest(url);
    }

    /**
     *
     * @param accessToken 授权access_token
     * @param openId 用户的微信open_id
     * @return
     */
    public static String getUserInfoByAuthorizationAccessTokenAndOpenId(String accessToken, String openId) {
        String url="https://api.weixin.qq.com/sns/userinfo?access_token="+accessToken
                +"&openid="+openId+"&lang=zh_CN";
        return HttpUtil.httpRequest(url);
    }

    /**
     * 获取js-sdk 票据
     * @param accessToken 普通access_token
     * @return js-sdk票据
     */
    public static String getWeChatJsApiTicket(String accessToken) {
        String url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken
                +"&type=jsapi";
        return HttpUtil.httpRequest(url);
    }

    /**
     * 获取js-sdk签名
     * @param ticket js-sdk票据
     * @param noncestr 随机数
     * @param timestamp 时间戳
     * @param url 调用这个接口的前端页面的路径，不包含#以后的部分
     * @return 签名
     * @throws Exception
     */
    public static String getJsApiTicketSignature(String ticket,String noncestr,String timestamp,String url) throws Exception {
        String readyToSign="jsapi_ticket="+ticket+"&noncestr="+noncestr+"&timestamp="+timestamp;
        if(url.indexOf("#")>0){
            url=url.substring(0,url.indexOf("#"));
        }
        readyToSign=readyToSign+"&url="+url;
        System.out.println("readyToSign="+readyToSign);
        String signed=Sha1Util.shaEncode(readyToSign);
        System.out.println("signed="+signed);
        return signed;
    }

}
